Date : 29 MARS 1992
Programme : CSHOW V8.32A
Protection :
Fichier : CSHOW.EXE
Temps pass� : 30 minutes
Soci�t� : SHAREWARE
Outils : SOFT-ICE V2.50
Divers : CONFECTION D'UN LANCEUR COM
Origine : L.F.
Num�ro : 169
Ce fichier pr�sente l'ultime agacement d'une part de faire attendre
l'utilisateur au d�but du programme pendant 15 secondes si un ou
plusieurs fichiers drivers sont manquant ( ce qui n'en emp�che pas
le fonctionnement ). De plus lorsque l'on quitte le soft celui-ci
affiche systematiquement un ecran shareware.
Le programme �tant crypt� par PKLITE avec l'option UNEXPANDABLE j'ai
simplement rep�r� les diff�rentes routines � supprimer et pass� les
deux offsets des IP au lanceur ainsi que les patchs � effectuer.
1) Le CALL qui effectue l'affichage du tableau pendant 15 secondes
peut �tre contourn� par un test situ� en amont ( forc�ment ! ).
Il suffit de forcer le saut se trouvant en:
ADR_IP1 CS:B89B 7408 JZ ---> 7508 JNZ
2) Le message de fin se trouve dans le CALL situ� en:
ADR_IP2 CS:B9CE E831.. CALL ---> EB01 JMP
Ci-dessous le lanceur:
; PATCH POUR LE PROGRAMME CSHOW ( shareware )
; DETOURNEMENT DE L'INT 1C
;
;******************************************************************************
; ZONE A INITIALISER
adr_ip1 equ 0b89bh ; adresse dont le contenu est � modifier.
; Cette valeur est "directe"
adr_ip2 equ 0b9ceh ; seconde valeur d'IP � rechercher.
; Cette valeur est "directe"
anc_val equ 0874h ; Valeur d'origine � rechercher. ( 7408 )
nouv_val equ 0875h ; Nouvelle valeur. ( 7508 )
anc_val1 equ 31e8h ; E831.. CALL
nouv_val1 equ 01ebh ; EB01 JMP +1
INT_DET equ 1Ch ; Le num�ro de l'INT que l'on veut utiliser.
BEEP_TONE EQU 440 ; Beep tone in hertz
BEEP_DURATION EQU 0ffffh
;CARTE_OUT_AL equ 1 ; Si 1 on assemble avec le test en IO 300h
;******************************************************************************
seg_a segment byte public
.
.
;------------------------------ PROGRAMME PERE ------------------------------
loc_1: mov sauve_SP,sp
.
.
.
int 21h ; terminate with al=return code
sto endp
;---------------------------- int d�tourn�e --------------------------------
int_entry proc far
_int: jmp _sp ; On contourne...
_SAUVE_SP dw 0,0 ; SP est sauv� dans l'int d�t.
_sp: push ax
push ds
push bx
push cx
push dx
pushf ; Push flags
ifdef CARTE_OUT_AL
mov dx,300h
xor al,al
out dx,al ; Allume les 8 leds.
else
mov dx,301h ; Test pour la carte PANO_AT
out dx,al ; RAZ du LS393.
endif
mov word ptr cs:[_SAUVE_SP],sp
mov cx,25
prochain: pop ds
dec cx
ifdef CARTE_OUT_AL
else
mov dx,300h
out dx,al ; Compte le nombre de d�pilage
; de SP.
endif
jz s
cmp word ptr ds:[adr_ip1],anc_val ; Si ok on patche.
jnz prochain
mov word ptr ds:[adr_ip1],nouv_val ; On y place le patch.
cont: pop ds
cmp word ptr ds:[adr_ip2],anc_val1
jnz cont
mov word ptr ds:[adr_ip2],nouv_val1
xor bx,bx
mov ds,bx
; L'INT 21 n'est pas r�entrante, on ne peut donc pas se servir de
; la fonction 25h ( set int. vector )
mov bx,word ptr cs:data_9 ; Je remets manuellement
mov ds:[INT_DET*4],bx ; en place le vecteur
mov bx,word ptr cs:data_9+2 ; de l'INT d�tourn�e.
mov ds:[INT_DET*4+2],bx
ifdef CARTE_OUT_AL
mov dx,300h
mov al,0ffh ; Carte OUT_AL
out dx,al ; Etteint les 8 leds.
endif
; Routine sonore qui g�n�re 3 bips si la protection est contourn�e.
rebou: mov cx, BEEP_DURATION
.
.
.
.
jnz main_b ; Trois bips...
s: mov sp,word ptr cs:[_SAUVE_SP]
popf
pop dx
pop cx
pop bx
pop ds
pop ax
jmp dword ptr cs:data_9
int_entry endp
;------------ REDUCTION DE LA PLACE OCCUPEE PAR LE PROGRAMME COM ------------
init: ; D�codage du texte.
.
.
.
fin_init label near
;----------------------- PLACE RESERVEE POUR LA PILE ------------------------
dw 100 dup (' ')
fin equ this byte ; ici le sommet de la pile, SP.
seg_a ends
end start
|